import ExceptionPage from '../components/Exception'
import MapboxMap from '../components/mymap'
import Logo from '../components/Logo'
import Toolbar from '../components/Toolbar'
import NdviLegend from '../components/Legend'
import GradeLegend from './Legend/GradeLegend'
import VsmLegend from './Legend/VsmLegend'
import LstLegend from './Legend/LstLegend'
import LaiLegend from './Legend/LaiLegend'
import TimeseriesControl from '../components/TimeseriesControl'
import Card from '../components/Card'
import DataTimeCard from './Card/DataTimeCard'

import TimeseriesCard from '../components/Card/TimeseriesCard'
import ChartCard from '../components/Card/ChartCard'
import HistoryCard from '../components/Card/HistoryCard'

import GlMap from './map/GlMap.vue'

import NavigationControl from './UI/controls/NavigationControl'
import GeolocateControl from './UI/controls/GeolocateControl'
import FullscreenControl from './UI/controls/FullscreenControl'
import AttributionControl from './UI/controls/AttributionControl'
import ScaleControl from './UI/controls/ScaleControl'
import Marker from './UI/Marker.vue'
import Popup from './UI/Popup.vue'

import GeojsonLayer from './layer/GeojsonLayer'
import ImageLayer from './layer/ImageLayer'
import CanvasLayer from './layer/CanvasLayer'
import VideoLayer from './layer/VideoLayer'
import VectorLayer from './layer/VectorLayer'
import RasterLayer from './layer/RasterLayer'

import withEventsMixin from '../lib/withEvents'
import withSelfEventsMixin from './UI/withSelfEvents'
import controlMixin from './UI/controls/controlMixin'
import layerMixin from './layer/layerMixin'

export {
  ExceptionPage,
  MapboxMap,
  Logo,
  Toolbar,
  NdviLegend,
  TimeseriesControl,
  Card,
  DataTimeCard,
  TimeseriesCard,
  ChartCard,
  HistoryCard,
  GradeLegend,
  VsmLegend,
  LstLegend,
  LaiLegend
}

export const withEvents = withEventsMixin
export const withSelfEvents = withSelfEventsMixin
export const asControl = controlMixin
export const asLayer = layerMixin

export const $helpers = {
  withEvents: withEventsMixin,
  withSelfEvents: withSelfEventsMixin,
  asControl: controlMixin,
  asLayer: layerMixin
}

export const MglMap = GlMap

export const MglNavigationControl = NavigationControl
export const MglGeolocateControl = GeolocateControl
export const MglFullscreenControl = FullscreenControl
export const MglAttributionControl = AttributionControl
export const MglScaleControl = ScaleControl

export const MglGeojsonLayer = GeojsonLayer
export const MglImageLayer = ImageLayer
export const MglCanvasLayer = CanvasLayer
export const MglVideoLayer = VideoLayer
export const MglVectorLayer = VectorLayer
export const MglRasterLayer = RasterLayer

export const MglMarker = Marker
export const MglPopup = Popup

export default GlMap
